package jnpf.model.dify.talk.resp;

import lombok.Data;

import java.util.List;
import java.util.Map;

/**
 * <p>
 * 用于表示模块创建的会话历史记录的实体类。
 * </p>
 */
@Data
public  class TalkHistory {
    /**
     * 表示获取的会话历史记录的数量限制。
     */
    public int limit;

    /**
     * 表示是否还有更多的会话历史记录可供获取。
     */
    public boolean has_more;

    /**
     * 存储具体的会话历史数据项列表。
     */
    public List<DataItem> data;

    /**
     * <p>
     * 表示单个会话历史数据项的内部类。
     * 每个数据项包含了一次会话的详细信息。
     * </p>
     *
     */
    @Data
    public class DataItem {
        /**
         * 该会话数据项的唯一标识。
         */
        public String id;

        /**
         * 会话的唯一标识，用于关联同一会话的不同消息。
         */
        public String conversation_id;

        /**
         * 父消息的唯一标识，用于表示消息之间的父子关系。
         */
        public String parent_message_id;

        /**
         * 包含与本次会话相关的输入信息的对象。
         */
        public Map<String,String> inputs;

        /**
         * 用户在本次会话中的查询内容。
         */
        public String query;

        /**
         * 对用户查询的回答内容。
         */
        public String answer;

        /**
         * 与本次会话相关的文件列表，由于类型不确定，暂用 Object 类型。
         */
        public List<Object> message_files;

        /**
         * 用户对本次会话的反馈信息，由于类型不确定，暂用 Object 类型。
         */
        public Object feedback;

        /**
         * 与本次会话相关的检索资源列表。
         */
        public List<RetrieverResource> retriever_resources;

        /**
         * 该会话数据项的创建时间（以时间戳表示）。
         */
        public long created_at;

        /**
         * 包含代理在处理本次会话时的思考过程的列表。
         */
        public List<AgentThought> agent_thoughts;

        /**
         * 本次会话的状态信息。
         */
        public String status;

        /**
         * 若本次会话处理过程中出现错误，存储错误信息，由于类型不确定，暂用 Object 类型。
         */
        public Object error;

        /**
         * <p>
         * 表示检索资源的内部类。
         * 包含了检索到的相关资源的详细信息。
         * </p>
         */
        @Data
        public class RetrieverResource {
            /**
             * 检索资源的唯一标识。
             */
            public String id;

            /**
             * 关联的消息的唯一标识。
             */
            public String message_id;

            /**
             * 资源在相关列表中的位置。
             */
            public int position;

            /**
             * 数据集的唯一标识。
             */
            public String dataset_id;

            /**
             * 数据集的名称。
             */
            public String dataset_name;

            /**
             * 文档的唯一标识。
             */
            public String document_id;

            /**
             * 文档的名称。
             */
            public String document_name;

            /**
             * 数据源类型。
             */
            public String data_source_type;

            /**
             * 数据段的唯一标识。
             */
            public String segment_id;

            /**
             * 资源的得分。
             */
            public double score;

            /**
             * 命中次数。
             */
            public int hit_count;

            /**
             * 单词数量。
             */
            public int word_count;

            /**
             * 数据段在文档中的位置。
             */
            public int segment_position;

            /**
             * 索引节点哈希值，由于类型不确定，暂用 Object 类型。
             */
            public Object index_node_hash;

            /**
             * 资源的内容。
             */
            public String content;

            /**
             * 资源的创建时间（以时间戳表示）。
             */
            public long created_at;
        }

        /**
         * <p>
         * 表示代理思考过程的内部类。
         * 包含了代理在处理会话时的相关思考信息。
         * </p>
         *
         */
        @Data
        public class AgentThought {
            /**
             * 代理思考过程的唯一标识。
             */
            public String id;

            /**
             * 关联的链的唯一标识，由于类型不确定，暂用 Object 类型。
             */
            public Object chain_id;

            /**
             * 关联的消息的唯一标识。
             */
            public String message_id;

            /**
             * 思考过程在相关列表中的位置。
             */
            public int position;

            /**
             * 代理的思考内容。
             */
            public String thought;

            /**
             * 代理使用的工具名称。
             */
            public String tool;

            /**
             * 包含工具标签信息的对象。
             */
            public ToolLabels tool_labels;

            /**
             * 工具的输入内容。
             */
            public String tool_input;

            /**
             * 思考过程的创建时间（以时间戳表示）。
             */
            public long created_at;

            /**
             * 代理观察到的信息。
             */
            public String observation;

            /**
             * 与思考过程相关的文件列表。
             */
            public List<MessageFile> message_files;

            /**
             * <p>
             * 表示工具标签信息的内部类。
             * 包含了工具的相关标签信息。
             * </p>
             */
            @Data
            public class ToolLabels {
                /**
                 * 特定数据集的标签信息对象。
                 */
                public DatasetLabel dataset_cb6d28a7_42a3_4957_82e4_3bc13d9278fe;
            }

            /**
             * <p>
             * 表示数据集标签的内部类。
             * 包含了数据集的英文和中文标签信息。
             * </p>
             *
             */
            @Data
            public class DatasetLabel {
                /**
                 * 数据集的英文标签。
                 */
                public String en_US;

                /**
                 * 数据集的中文标签。
                 */
                public String zh_Hans;
            }

            /**
             * <p>
             * 表示消息文件的内部类。
             * 包含了文件的相关属性信息。
             * </p>
             */
            @Data
            public class MessageFile {
                /**
                 * 文件的唯一标识，由于类型不确定，暂用 Object 类型。
                 */
                public Object id;

                /**
                 * 文件名，由于类型不确定，暂用 Object 类型。
                 */
                public Object filename;

                /**
                 * 文件类型，由于类型不确定，暂用 Object 类型。
                 */
                public Object type;

                /**
                 * 文件的 URL，由于类型不确定，暂用 Object 类型。
                 */
                public Object url;

                /**
                 * 文件的 MIME 类型，由于类型不确定，暂用 Object 类型。
                 */
                public Object mime_type;

                /**
                 * 文件大小。
                 */
                public int size;

                /**
                 * 文件的传输方法，由于类型不确定，暂用 Object 类型。
                 */
                public Object transfer_method;

                /**
                 * 文件所属的对象（例如用户）。
                 */
                public String belongs_to;
            }
        }
    }
}
